package aceim.app.utils; import java.util.ArrayList; import java.util.List; import aceim.api.utils.Logger; import aceim.api.utils.Logger.LoggerLevel; import aceim.app.MainActivity; import aceim.app.view.page.NoPage; import aceim.app.view.page.Page; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; public final class PageManager { private NoPage mNoPageView = null; private final int mPageHolderId; private Page mSelectedPage; private final MainActivity mActivity; private final List<Page> mPages = new ArrayList<Page>(); public PageManager(int pageHolderId, MainActivity activity) { this.mPageHolderId = pageHolderId; this.mActivity = activity; init(); } private void init() { mActivity.getSupportFragmentManager() .beginTransaction() .disallowAddToBackStack() .attach(getNoPageView()) .replace(mPageHolderId, getNoPageView()) .commit(); } public void onPageChanged(Page newSelectedPage) { Logger.log("Page changed to " + newSelectedPage, LoggerLevel.VERBOSE); if (newSelectedPage == null) { return; } FragmentManager fm = mActivity.getSupportFragmentManager(); Page newPage = (Page) fm.findFragmentByTag(newSelectedPage.getPageId()); FragmentTransaction ft = fm.beginTransaction().disallowAddToBackStack(); if (mSelectedPage != null) { mSelectedPage.onLeaveMe(); ft.detach(mSelectedPage); } if (newPage == null) { newPage = newSelectedPage; ft.attach(newPage); } mSelectedPage = newPage; ft.replace(mPageHolderId, mSelectedPage); ft.commitAllowingStateLoss(); } public void onPageRemoved(Page page){ if (page == null) { return; } FragmentManager fm = mActivity.getSupportFragmentManager(); FragmentTransaction ft = fm.beginTransaction().disallowAddToBackStack(); ft.remove(page); if (mPages.size() < 1) { mSelectedPage = null; ft.replace(mPageHolderId, getNoPageView()); } ft.commit(); } private Fragment getNoPageView() { if (mNoPageView == null) { mNoPageView = new NoPage(); } return mNoPageView; } /** * @return the mSelectedPage */ public Page getSelectedPage() { return mSelectedPage; } /** * @param mSelectedPage the mSelectedPage to set */ public void setSelectedPage(Page mSelectedPage) { this.mSelectedPage = mSelectedPage; } /** * @return the mPages */ public List<Page> getPages() { return mPages; } }